Skip to content

feat: Experimental --discriminator and --require-discriminator#21

Merged
eliassjogreen merged 2 commits intomainfrom
feat/discriminators
Apr 10, 2025
Merged

feat: Experimental --discriminator and --require-discriminator#21
eliassjogreen merged 2 commits intomainfrom
feat/discriminators

Conversation

@eliassjogreen
Copy link
Member

@eliassjogreen eliassjogreen commented Apr 10, 2025

See #10

Still very experimental.

Allows you to generate fetch types which look like the following:

// With --experimental-discriminator=api
function fetch<T extends "api" = "api">(input: `/api/v1/users/login`);

// With --experimental-discriminator=api --experimental-require-discriminator
function fetch<T extends "api">(input: `/api/v1/users/login`);

This is also helpful for projects which are using multiple different backends as a way of namespacing the types for each:

// With --experimental-discriminator=imdb --experimental-require-discriminator
function fetch<T extends "imdb">(input: `/api/v1/movies`);

// With --experimental-discriminator=api --experimental-require-discriminator
function fetch<T extends "api">(input: `/api/v1/users/login`);

To use the fetch with a discriminator specified you simply need to pass it as the first generic argument:

// With --experimental-discriminator=api --experimental-require-discriminator
function fetch<T extends "api">(input: `/api/v1/users/login`);

// Works!
fetch<"api">("/api/v1/users/login", { ... });

// Fails!
fetch<"imdb">("/api/v1/users/login", { ... });

// Falls back to the default `fetch` type which isn't going to be typed.
// When not using the `--experimental-require-discriminator` flag this
// will still work as before. E.g. returning the types if any are found
// matching the function signature.
fetch("/api/v1/users/login", { ... });

@eliassjogreen eliassjogreen changed the title feat: Implement --discriminator and --require-discriminator flags feat: Experimental --discriminator and --require-discriminator Apr 10, 2025
@eliassjogreen eliassjogreen merged commit 19bdd74 into main Apr 10, 2025
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant